#ifndef FILE_H
#define FILE_H

/**
  These are the function IDs the File will expect to be
  able to use on the resource given.
**/
#define FILE_OPEN   1500
#define FILE_CLOSE  1501
#define FILE_READ   1502
#define FILE_WRITE  1503
#define FILE_LENGTH 1504

/**
  Syscall interface.
  This class is abstract, so make it's IF numbers
  quite high to avoid collisions with subclasses.
**/
namespace File_IF
{
  const int identify          =101;
  const int getName           =102;
  const int getImplDefined    =103;
  const int getResource       =104;
}

/**
  An enum specifying all the possible types of file.
  A File* object should respond with one of these
  to verify what type of File it is.
**/
enum FileTypes
{
  eFileType_File,       // Pure virtual, should never be used.
  eFileType_Directory,
  eFileType_CharDevice,
  eFileType_BlockDevice,
  eFileType_Symlink,
  eFileType_RegularFile
};

#endif
